package com.yishusmt.wechatapi.wechatdev.utils;

import com.yishusmt.wechatapi.wechatdev.constant.MessageConstant;
import com.yishusmt.wechatapi.wechatdev.dto.base.BaseArticles;
import com.yishusmt.wechatapi.wechatdev.dto.base.BaseMediald;
import com.yishusmt.wechatapi.wechatdev.dto.base.BaseMusic;
import com.yishusmt.wechatapi.wechatdev.dto.base.Item;
import com.yishusmt.wechatapi.wechatdev.dto.response.*;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;

/**
 * 消息填充
 *
 * @author zhangyi
 * @date 2018/8/29 11:00
 */
public class MessageUtil {

    /**
     * 发送图文消息
     *
     * @param map 获取用户基本信息
     * @param items 文章实例列表 最多8篇
     * @return
     */
    public static String sendImgAndText(Map<String,String> map,List<Item> items){
        ImgAndTextRes imgAndTextRes = new ImgAndTextRes();
        BaseArticles baseArticles = new BaseArticles();
        //填装用户基本信息
        imgAndTextRes.setMsgType(MessageConstant.RESP_MESSAGE_TYPE_NEWS);
        imgAndTextRes.setToUserName(map.get("ToUserName"));
        imgAndTextRes.setFromUserName(map.get("FromUserName"));
        imgAndTextRes.setCreateTime(new Long(map.get("CreateTime")));

        baseArticles.setItem(items);
        //文章个数
        imgAndTextRes.setArticleCount(items.size());
        //填装文章信息
        imgAndTextRes.setArticles(baseArticles);
        return WeChatXmlUtil.objToXml(imgAndTextRes);
    }

    /**
     * 纯文本发送
     *
     * @param map
     * @return
     */
    public static String sendText(Map<String,String> map,String sendText){
        TextRes textRes = new TextRes();
        textRes.setCreateTime(new Long(map.get("CreateTime")));
        textRes.setFromUserName(map.get("FromUserName"));
        textRes.setMsgId(Long.parseLong(Optional.ofNullable(map.get("MsgId")).isPresent() ? map.get("MsgId") : "1"));
        textRes.setMsgType(MessageConstant.RESP_MESSAGE_TYPE_TEXT);
        textRes.setToUserName(map.get("ToUserName"));
        textRes.setContent(sendText);
        return WeChatXmlUtil.objToXml(textRes);
    }

    /**
     * 链接消息实体(不支持被动发送用户)
     *
     * @param linkRes
     * @return
     */
    public static String sendLinkNews(Map<String,String> map,LinkRes linkRes){
        linkRes.setCreateTime(new Long(map.get("CreateTime")));
        linkRes.setFromUserName(map.get("FromUserName"));
        linkRes.setMsgId(Long.parseLong(map.get("MsgId")));
        linkRes.setMsgType(MessageConstant.REQ_MESSAGE_TYPE_LINK);
        linkRes.setToUserName(map.get("ToUserName"));
        return WeChatXmlUtil.objToXml(linkRes);
    }

    /**
     * 纯图片消息
     *
     * 需要微信返回MediaId来显示该图片，此图片是临时上传的图片素材，在微信上只能保存3天，之后失效
     *
     * 解决方法：
     *  将需要传的图片保存在本地服务器，每隔3天自动上传，将MediaId保存在缓存中，每次上传刷新id值
     *
     * @param map
     * @param mediald
     * @return
     */
    public static String sendImg(Map<String,String> map, String mediald){
        ImgRes imgRes = new ImgRes();
        imgRes.setCreateTime(new Long(map.get("CreateTime")));
        imgRes.setFromUserName(map.get("FromUserName"));
        imgRes.setMsgType(MessageConstant.REQ_MESSAGE_TYPE_IMAGE);
        imgRes.setToUserName(map.get("ToUserName"));
        List<BaseMediald> list = new ArrayList<>();
        BaseMediald baseMediald = new BaseMediald();
        baseMediald.setMediaId(mediald);
        list.add(baseMediald);
        imgRes.setBaseMediald(list);
        return WeChatXmlUtil.objToXml(imgRes);
    }

    /**
     * 回复音乐消息
     *
     * @param map
     * @param baseMusic
     * @return
     */
    public static String sendMusic(Map<String,String> map, BaseMusic baseMusic){
        MusicRes musicRes = new MusicRes();
        musicRes.setCreateTime(new Long(map.get("CreateTime")));
        musicRes.setFromUserName(map.get("FromUserName"));
        musicRes.setMsgType(MessageConstant.RESP_MESSAGE_TYPE_MUSIC);
        musicRes.setToUserName(map.get("ToUserName"));
        musicRes.setBaseMusic(baseMusic);
        return WeChatXmlUtil.objToXml(musicRes);
    }
}
